草庐IT

Python Django 模板 : Iterate Through List

全部标签

c++ - 我们应该如何在函数中使用带有 std::accumulate 的模板来通过考虑模板而不是 "init"来返回正确的类型

std::accumulate的返回类型取决于“init”,即如果它是整数,它将返回整数,如果是double,它将返回double。我有一个像这样求和的模板函数:Tmean(std::vectorvector){Tsum=std::accumulate(vector.begin(),vector.end(),X);}我应该用什么代替X? 最佳答案 您可以只使用T{},它是默认构造的T。例如Tsum=std::accumulate(vector.begin(),vector.end(),T{});如果你需要用一些初始值来初始化它,你可

c++ - C++ 模板的部分特化 : template parameter not deducible

下面的代码工作正常:templateclassFib{};templateclassFib{};但是下面的代码显示错误为:Error:templateparametersnotdeducibleinpartialspecialization:templateclassFib{};templateclassFib{};你能解释一下这种行为的原因吗? 最佳答案 我相信您只是缺少部分特化的正确语法:templateclassFib{};templateclassFib{};模板上的第一个参数是类型,而第二个只是一个常量值。

c++ - 如何使用模板元编程展开 for 循环

如何编写简单的C++代码来简单地运行具有特定展开因子的for循环?例如,我需要编写一个for循环,为数组的每个索引分配一个值i,即A[i]=i数组大小假设为1e6。现在我想添加一个假设为20的展开因子。我不想手动编写20行代码并将其迭代5k次。我该怎么做呢?我是否嵌套for循环?如果我使用模板元编程,编译器会自动为我做一些展开吗?以及如何手动设置展开因子(当然在编译时固定)? 最佳答案 以下示例是用C++17编写的,但通过一些更详细的技术,该想法适用于C++11及更高版本。如果你真的想强制展开,那么考虑std::make_integ

c++ - 使用 typedef 的模板特化

在学习Vulkan时,我在VulkanCookbook中看到了一些代码。在VulkanCookbook中,作者编写了手动导入Vulkan函数和类的代码。好吧,我一直在慢慢地将它转换为LunarG的VulkanSDK,我在64位以下的VkFence中遇到了一个问题,它将类型定义为VkFence_T*,这很好,但在32位中,它的类型定义为uint64_t,这会导致使用类似于以下代码的VkDestroyer的问题#include#includetypedefuint64_tA;typedefuint64_tB;templateclassHandler{voidDestroyObject(Tp

c++ - Constexpr 如果使用非模板类型

#includeintfoo(intx){ifconstexpr(std::is_same_v){x=std::string();}}intmain(void){return0;}此代码无法在GCC7或Clang5上编译:error:cannotconvert‘std::__cxx11::string{akastd::__cxx11::basic_string}’to‘int’inassignmentx=std::string();由于引用的行位于constexprif分支中,该分支的计算结果应为false,程序是否可以正常编译? 最佳答案

c++ - 在模板函数中可以使用已删除构造函数的 decltype

据我所知,decltype不允许使用已删除的构造函数:structno_def{no_def()=delete;};voidtest(){decltype(no_def())a{};//error:useofdeletedfunction‘no_def::no_def()’}但如果我将模板设为“测试”函数,它就会编译templatevoidtest(){decltype(no_def())a{};//OK}还有它templatevoidtest(){decltype(no_def("not","defined","constructor"))a{};//OK}谁能解释一下?

C++ 模板 - 浮点型和整型的不同特化

我正在尝试编写一个带有如下签名的函数:templateTobar(Fromin){...}这个函数需要有不同的行为取决于ifTo是float型还是积分型。(假设From是整数且都是算术)这可以使用ifconstexpr(std::is_integral::value){...}else{...}轻松实现,但是我仅限于没有ifconstexpr的C++11.实现这种特化的好方法是什么? 最佳答案 您可以将模板重载与SFINAE一起使用.例如templatetypenamestd::enable_if::value,To>::typeb

c++ - 当类是另一个模板的模板参数时,可以使用类模板参数推导吗?

我试过这样写代码:#include#include#includeusingnamespacestd::string_literals;intmain(){std::vectorv{1,2,3};std::pairp{1,"a"s};//std::vectorvp{{1,"a"s},{2,"b"s},{3,"c"s}};//ERROR}但是它在pair是vector的模板参数的行中给出了编译错误。有没有办法让类模板推导在这里工作,或者我是否需要为对指定模板参数? 最佳答案 目前不支持。来自[dcl.type.class.deduct

C++ 模板进阶

C++模板进阶一.非类型模板参数1.概念2.实例3.注意事项二.模板的特化1.引出2.函数模板的特化1.语法和使用2.建议3.类模板的特化1.全特化2.偏特化1.部分特化2.对参数进行进一步的限制4.匹配顺序三.模板的分离编译1.什么是分离编译2.模板的分离编译3.解决方法1.显式实例化(不推荐)2.分离编译放在头文件当中四.模板的总结一.非类型模板参数1.概念模板参数分为:类型形参与非类型形参类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称后面非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用2.实例比方说

c++ - 模板类型推导失败(std::empty 作为谓词)

我有一个vector的vector,我想检查它们是否都是空的。使用标准库,我试过:#include#includeintmain(){std::vector>vv;std::all_of(std::begin(vv),std::end(vv),std::empty);}这会导致clang7.0出现以下错误:/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h:508:5:note:candidatetemplateignored:couldn'tinfertemp